package ar.com.quickMart.database.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import ar.com.quickMart.database.CommonDao;

public class CommonDaoMySql extends BaseDaoMySql implements CommonDao{
	
	public List<String> getCountries(){
		// Creo variable para la conexion
		Connection connection;
				
		// Creo variables para el resultado de la consulta
		ResultSet result;
		
		List<String> countries= new ArrayList<String>();
				
		// Abro la conexion
		connection = connect();
				
		// Creo el query
		String query = "SELECT nombre From Pais;";

		try {
					
			// Creo la sentencia y ejecuto el query
			Statement statement = connection.createStatement();
			result = statement.executeQuery(query);
					
			// Obtengo datos de la consulta
			result = statement.getResultSet();
					
			while(result.next()) {
				countries.add(result.getString("nombre"));
			}
			
		}
		catch (Exception ex) {
			ex.printStackTrace();
					
			// Desconecto de la BDD
			disconnect(connection);
					
			// Error al obtener clave, devuelvo null
			return null;
		}
				
		// Desconecto de la BDD
		disconnect(connection);
				
		if(countries.size() > 0){
			return countries;
		}
		else{
			return null;
		}
	}
	
	public List<String> getProvinces(String countryName){
		// Creo variable para la conexion
		Connection connection;
				
		// Creo variables para el resultado de la consulta
		ResultSet result;
		
		List<String> provinces= new ArrayList<String>();
				
		// Abro la conexion
		connection = connect();
				
		// Creo el query
		String query = "SELECT P.nombre From Provincia P JOIN Pais PA ON P.Pais_id = PA.id WHERE PA.nombre = ?;";

		try {
					
			// Creo la sentencia y ejecuto el query
			PreparedStatement statement = connection.prepareStatement(query);
			statement.setString(1, countryName);
			
			result = statement.executeQuery();
					
			// Obtengo datos de la consulta
			result = statement.getResultSet();
					
			while(result.next()) {
				provinces.add(result.getString("nombre"));
			}
			
		}
		catch (Exception ex) {
			ex.printStackTrace();
					
			// Desconecto de la BDD
			disconnect(connection);
					
			// Error al obtener clave, devuelvo null
			return null;
		}
				
		// Desconecto de la BDD
		disconnect(connection);
				
		if(provinces.size() > 0){
			return provinces;
		}
		else{
			return null;
		}
	}
	
	/**
	 * 
	 * getCountryId
	 * 
	 * Devuelve el id de un pais cuyo nombre se pasa por parametro
	 * 
	 * @param 	country	Nombre del pais
	 * @return			id del pais, -1 en caso contrario
	 */
	public long getCountryId(String country) {
		
		// Creo variable para la conexion
		Connection connection;
		
		// Creo variables para el resultado de la consulta
		ResultSet result;
		long countryId;
		
		
		// Abro la conexion
		connection = connect();
		
		// Creo el query
		String query = "SELECT id From Pais WHERE Nombre = \"" + country + "\"";

		try {
			
			// Creo la sentencia y ejecuto el query
			Statement statement = connection.createStatement();
			result = statement.executeQuery(query);
			
			// Obtengo datos de la consulta
			result = statement.getResultSet();
			if(result.next()) {
				countryId = ((Long) result.getObject("id")).longValue();
			}
			else {
				countryId = -1;
			}
		}
		catch (Exception ex) {
			ex.printStackTrace();
			
			// Desconecto de la BDD
			disconnect(connection);
			
			// Error al obtener id, devuelvo -1
			return -1;
		}
		
		// Desconecto de la BDD
		disconnect(connection);
		
		// Devuelvo el id;
		return countryId;	
	}
	
	/**
	 * 
	 * getProvinceId
	 * 
	 * Devuelve el id de una provincia de un pais, cuyo nombre se recibe por parametro
	 * 
	 * @param province		Nombre de la provincia
	 * @param countryId		Id del pais al que pertenece la provincia
	 * @return
	 */
	public long getProvinceId(String province, long countryId) {
		
		// Creo variable para la conexion
		Connection connection;
		
		// Creo variables para el resultado de la consulta
		ResultSet result;
		long provinceId;
		
		// Abro la conexion
		connection = connect();
		
		// Creo el query
		String query = "SELECT id From Provincia WHERE Nombre = \"" + province + "\" AND Pais_id = " + countryId;

		try {
			
			// Creo la sentencia y ejecuto el query
			Statement statement = connection.createStatement();
			result = statement.executeQuery(query);
			
			// Obtengo datos de la consulta
			result = statement.getResultSet();
			if(result.next()) {
				provinceId = (long) result.getLong("id");
			}
			else {
				provinceId = -1;
			}
		}
		catch (Exception ex) {
			ex.printStackTrace();
			
			// Desconecto de la BDD
			disconnect(connection);
			
			// Error al obtener id, devuelvo -1
			return -1;
		}
		
		// Desconecto de la BDD
		disconnect(connection);
		
		// Devuelvo el id;
		return provinceId;	
	}

}
